package cn.itsource.file;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Arrays;

/**
 *	File:
 *		1. 概念： 就是用了表示文件和文件夹的一个类
 *		2. 作用：用来将内存和硬盘进行数据的交互的
 *
 *		3. 使用：
 *			1. 创建对象：
 *					构造方法：
 *			2. 调用方法：
 *					文件或者文件夹的增删改查
 *			
 */
public class FileTest {

	public static void main(String[] args) throws IOException {
		/*
		 * 构造方法：
			File(String pathname) 根据文件名创建一个File对象，
				pathname:（如果有后缀就是一个文件对象，如果没有后缀会默认为是一个文件夹对象）
					1. 相对路径：相对于当前Java类的项目
					2. 绝对路径：从根目录或者盘符开始	/都表示从根目录或者盘符开始
					
			File(String parent, String child) 在父级目录下创建一个文件或文件夹
				parent：父级目录
				child：当前目录或者当前文件
		 * 
		 * 	File(File parent, String child) 在父级目录下创建一个文件或文件夹
		 */
//		File dir = new File("a");//表示相对路径下在内存中创建一个文件夹对象a(如果硬盘中对应路径下有该a文件夹，则就指代该a文件夹)
		/*
		 * 表示绝对路径下在内存中创建一个文件夹对象a(如果硬盘中对应路径下有该a文件夹，则就指代该a文件夹)
		 * 如果当前文件夹是多层级的文件夹，则当前对象就是指代最后一个层级的文件夹对象或者文件对象
		 * 如：F:/a/b/c 就指代c这一层级
		 */
		File dir2 = new File("F:/test");
		
		//常用方法：
		//1.boolean mkdir() 在硬盘创建一个文件夹对象。  如果该路径不存在，则不会创建，也不会抛出异常
		boolean mkdir = dir2.mkdir();
		System.out.println("是否成功创建文件夹：" + mkdir);
		
		//2.boolean mkdirs() 在硬盘创建多层级的文件夹对象。  
		File dir3 = new File("F:/t1/t2/t3/t5");
		boolean mkdirs = dir3.mkdirs();
		System.out.println("是否成功创建多层级文件夹：" + mkdirs);
		
		//3.boolean createNewFile()  在硬盘创建一个文件对象
//		File dir4 = new File("F:/testFile");//
//		boolean createNewFile = dir4.createNewFile();//这里语法正确，都是实际业务错误，因为文件必须有后缀
		File file = new File("F:/myFile.txt");//
		boolean createNewFile = file.createNewFile();
		System.out.println(createNewFile);
		
		//4.boolean delete()删除文件或者文件夹（删除文件夹的时候，该文件夹必须是空文件夹）
//		boolean delete = dir2.delete();//文件夹删除的是指最后一层的文件夹对象
//		System.out.println(delete);
//		File dir5 = new File("F:/t1");
//		boolean delete2 = dir5.delete();
//		System.out.println(delete2);
//		boolean delete3 = file.delete();
//		System.out.println(delete3);
		
		//5.boolean exists()判段文件或目录是否在硬盘上存在。 
		boolean exists = file.exists();
		System.out.println(exists);
		
		//6.boolean isDirectory() 判断当前对象是不是文件夹
		boolean directory = file.isDirectory();
		System.out.println("是否是文件夹：" + directory);
		boolean directory2 = dir3.isDirectory();
		System.out.println("是否是文件夹：" + directory2);
		
		//7.boolean isFile()    判断当前对象是不是文件
		boolean isFile = file.isFile();
		System.out.println("是否是文件：" + isFile);
		boolean isFile2 = dir3.isFile();
		System.out.println("是否是文件：" + isFile2);
		
		//8.long length()  获取文件的字节数
		long length = file.length();
		System.out.println("当前文件的长度是：" + length + "个字节");
		long length2 = dir3.length();//不能直接获取文件夹中所有文件的大小
		System.out.println("当前文件夹大小是：" + length2 + "个字节");
		
		//9.String getAbsolutePath() 获取文件夹或者文件绝对路径名字符串。
		String absolutePath = file.getAbsolutePath();
		System.out.println(absolutePath);
		String absolutePath2 = dir3.getAbsolutePath();
		System.out.println(absolutePath2);
		
		File dir6 = new File("a");
		String absolutePath3 = dir6.getAbsolutePath();
		System.out.println(absolutePath3);
		
		//10.String getName()  获取文件(或者文件夹)名（不包含上级目录）
		String name = file.getName();
		System.out.println(name);
		
		String getName = dir3.getName();
		System.out.println(getName);
		
		String getName2 = dir6.getName();
		System.out.println(getName2);
		
		//11.String getParent()获取父路径String格式，相对路径不能获取父级目录(没有层级结构的)
		String getParent = file.getParent();
		System.out.println(getParent);
		
		String getParent2 = dir3.getParent();
		System.out.println(getParent2);
		
		String getParent3 = dir6.getParent();
		System.out.println(getParent3);
		
		//12.File getParentFile() 获取父类路径的File对象
		File getParentFile = file.getParentFile();
		System.out.println(getParentFile);
		
		File getParentFile2 = dir3.getParentFile();
		System.out.println(getParentFile2);
		
		File getParentFile3 = dir6.getParentFile();
		System.out.println(getParentFile3);
		
		//13.static File[] listRoots()  获取当前系统的所有盘符或者根目录
		File[] listRoots = File.listRoots();
		System.out.println(Arrays.toString(listRoots));
		
		//14.boolean renameTo(File dest) 重命名当前文件或文件夹对象 
		File file2 = new File("F:/newFile.avi");
		boolean renameTo = file.renameTo(file2);//原来file对象名：myFile.txt
		System.out.println(renameTo);
		
		//15.Path toPath()  将当前文件或文件夹对象转换为Path类型，在JavaWeb中做文件上传的时候用到
		Path path = file.toPath();
		System.out.println(path);
		
	}

}
